package plateau;
import java.util.ArrayList;

import serveur.Barriere;


public class Plateau {

	boolean matBarriere[][];
	Pion pionBlanc;
	Pion pionNoir;
	
	ArrayList<Barriere> listeBarrieres = new ArrayList<Barriere>();

	
	public Plateau () {
		this.matBarriere = new boolean [17][17];
		for (int i = 0; i < 17; i++) {
			for (int j = 0; j < 17; j++) {
				this.matBarriere[i][j] = false;
			}
		}
	}
	
	public Plateau getPlateau() throws CloneNotSupportedException {
		return (Plateau) this.clone();
	}
	
	public boolean deplacementPionBlancPossible (Direction direction) {
		boolean res = true;
		
		Direction localDirection = direction;
		
		if(localDirection.equals("N")){
			if(pionBlanc.getY() >= 2 && !barrierePresente(pionBlanc.getX(), pionBlanc.getY() - 1) &&
					!((pionNoir.getX() == pionBlanc.getX()) && (pionNoir.getY() == pionBlanc.getY() - 2))){
				res=true;
			}
			else if ((pionNoir.getX() == pionBlanc.getX()) && (pionNoir.getY() == pionBlanc.getY() - 2)){
				deplacementPionBlancPossible (Direction.NN);
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("E")){
			if(pionBlanc.getX() <= 14 && !barrierePresente(pionBlanc.getX()+1, pionBlanc.getY()) &&
					!((pionNoir.getY() == pionBlanc.getY()) && (pionNoir.getX() == pionBlanc.getX() + 2))){
				res=true;
			}
			else if ((pionNoir.getY() == pionBlanc.getY()) && (pionNoir.getX() == pionBlanc.getX() + 2)){
				deplacementPionBlancPossible (Direction.EE);
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("S")){
			if(pionBlanc.getY() <= 14 && !barrierePresente(pionBlanc.getX(), pionBlanc.getY() + 1) &&
					!((pionNoir.getX() == pionBlanc.getX()) && (pionNoir.getY() == pionBlanc.getY() + 2))){
				res=true;
			}
			else if ((pionNoir.getX() == pionBlanc.getX()) && (pionNoir.getY() == pionBlanc.getY() + 2)){
				deplacementPionBlancPossible (Direction.SS);
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("W")){
			if(pionBlanc.getX() >= 2 && !barrierePresente(pionBlanc.getX()-1, pionBlanc.getY()) &&
					!((pionNoir.getY() == pionBlanc.getY()) && (pionNoir.getX() == pionBlanc.getX() - 2))){
				res=true;
			}
			else if ((pionNoir.getY() == pionBlanc.getY()) && (pionNoir.getX() == pionBlanc.getX() - 2)){
				deplacementPionBlancPossible (Direction.WW);
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("NN")){
			if(pionBlanc.getY() >= 4 && !barrierePresente(pionBlanc.getX(), pionBlanc.getY() - 1) &&
					((pionNoir.getX() == pionBlanc.getX()) && (pionNoir.getY() == pionBlanc.getY() - 2))
					&& !barrierePresente(pionBlanc.getX(), pionBlanc.getY() - 3)){
				res=true;
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("EE")){
			if(pionBlanc.getY() <= 12 && !barrierePresente(pionBlanc.getX()+1, pionBlanc.getY()) &&
					((pionNoir.getY() == pionBlanc.getY()) && (pionNoir.getX() == pionBlanc.getX() +2))
					&& !barrierePresente(pionBlanc.getX()+3, pionBlanc.getY())){
				res=true;
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("WW")){
			if(pionBlanc.getY() >= 4 && !barrierePresente(pionBlanc.getX()-1, pionBlanc.getY()) &&
					((pionNoir.getY() == pionBlanc.getY()) && (pionNoir.getX() == pionBlanc.getX() -2))
					&& !barrierePresente(pionBlanc.getX()-3, pionBlanc.getY())){
				res=true;
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("SS")){
			if(pionBlanc.getY() <= 12 && !barrierePresente(pionBlanc.getX(), pionBlanc.getY() + 1) &&
					((pionNoir.getX() == pionBlanc.getX()) && (pionNoir.getY() == pionBlanc.getY() + 2))
					&& !barrierePresente(pionBlanc.getX(), pionBlanc.getY() + 3)){
				res=true;
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("NE")){
			if ((pionNoir.getX() == pionBlanc.getX()) && (pionNoir.getY() == pionBlanc.getY() - 2)){
				if (pionBlanc.getY() >= 2 && pionBlanc.getX() <= 14 &&
						!barrierePresente(pionBlanc.getX(), pionBlanc.getY() - 1) && 
						!barrierePresente(pionBlanc.getX()+1, pionBlanc.getY() - 3)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
			else if ((pionNoir.getY() == pionBlanc.getY()) && (pionNoir.getX() == pionBlanc.getX() + 2)){
				if (pionBlanc.getY() >= 2 && pionBlanc.getX() <= 14 &&
						!barrierePresente(pionBlanc.getX()+1, pionBlanc.getY()) && 
						!barrierePresente(pionBlanc.getX()+2, pionBlanc.getY()-1)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
		}
		
		if(localDirection.equals("NW")){
			if ((pionNoir.getX() == pionBlanc.getX()) && (pionNoir.getY() == pionBlanc.getY() - 2)){
				if (pionBlanc.getY() >= 2 && pionBlanc.getX() >= 2 &&
						!barrierePresente(pionBlanc.getX(), pionBlanc.getY() - 1) && 
						!barrierePresente(pionBlanc.getX()-1, pionBlanc.getY() - 3)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
			else if ((pionNoir.getY() == pionBlanc.getY()) && (pionNoir.getX() == pionBlanc.getX() - 2)){
				if (pionBlanc.getY() >= 2 && pionBlanc.getX() >= 2 &&
						!barrierePresente(pionBlanc.getX()-1, pionBlanc.getY()) && 
						!barrierePresente(pionBlanc.getX()-2, pionBlanc.getY()-1)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
		}
		
		if(localDirection.equals("SE")){
			if ((pionNoir.getX() == pionBlanc.getX()) && (pionNoir.getY() == pionBlanc.getY() + 2)){
				if (pionBlanc.getY() <= 14 && pionBlanc.getX() <= 14 &&
						!barrierePresente(pionBlanc.getX(), pionBlanc.getY() + 1) && 
						!barrierePresente(pionBlanc.getX()+1, pionBlanc.getY() + 3)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
			else if ((pionNoir.getY() == pionBlanc.getY()) && (pionNoir.getX() == pionBlanc.getX() + 2)){
				if (pionBlanc.getY() <= 14 && pionBlanc.getX() <= 14 &&
						!barrierePresente(pionBlanc.getX()+1, pionBlanc.getY()) && 
						!barrierePresente(pionBlanc.getX()+2, pionBlanc.getY()+1)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
		}
		
		if(localDirection.equals("SW")){
			if ((pionNoir.getX() == pionBlanc.getX()) && (pionNoir.getY() == pionBlanc.getY() - 2)){
				if (pionBlanc.getY() <= 14 && pionBlanc.getX() >= 2 &&
						!barrierePresente(pionBlanc.getX(), pionBlanc.getY() - 1) && 
						!barrierePresente(pionBlanc.getX()-1, pionBlanc.getY() - 3)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
			else if ((pionNoir.getY() == pionBlanc.getY()) && (pionNoir.getX() == pionBlanc.getX() - 2)){
				if (pionBlanc.getY() <= 14 && pionBlanc.getX() >= 2  &&
						!barrierePresente(pionBlanc.getX()-1, pionBlanc.getY()) && 
						!barrierePresente(pionBlanc.getX()-2, pionBlanc.getY()+1)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
		}
		return res;
	}
	
	private boolean barrierePresente(int x, int i) {
		return false;
	}

	public boolean deplacementPionNoirPossible (Direction direction) {
		boolean res = true;
		
		Direction localDirection = direction;
		
		if(localDirection.equals("N")){
			if(pionBlanc.getY() >= 2 && !barrierePresente(pionNoir.getX(), pionNoir.getY() - 1) &&
					!((pionBlanc.getX() == pionNoir.getX()) && (pionBlanc.getY() == pionNoir.getY() - 2))){
				res=true;
			}
			else if ((pionBlanc.getX() == pionNoir.getX()) && (pionBlanc.getY() == pionNoir.getY() - 2)){
				deplacementPionBlancPossible (Direction.NN);
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("E")){
			if(pionNoir.getX() <= 14 && !barrierePresente(pionNoir.getX()+1, pionNoir.getY()) &&
					!((pionBlanc.getY() == pionNoir.getY()) && (pionBlanc.getX() == pionNoir.getX() + 2))){
				res=true;
			}
			else if ((pionBlanc.getY() == pionNoir.getY()) && (pionBlanc.getX() == pionNoir.getX() + 2)){
				deplacementPionBlancPossible (Direction.EE);
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("S")){
			if(pionNoir.getY() <= 14 && !barrierePresente(pionNoir.getX(), pionNoir.getY() + 1) &&
					!((pionBlanc.getX() == pionNoir.getX()) && (pionBlanc.getY() == pionNoir.getY() + 2))){
				res=true;
			}
			else if ((pionBlanc.getX() == pionNoir.getX()) && (pionBlanc.getY() == pionNoir.getY() + 2)){
				deplacementPionBlancPossible (Direction.SS);
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("W")){
			if(pionBlanc.getX() >= 2 && !barrierePresente(pionBlanc.getX()-1, pionBlanc.getY()) &&
					!((pionBlanc.getY() == pionNoir.getY()) && (pionBlanc.getX() == pionNoir.getX() - 2))){
				res=true;
			}
			else if ((pionBlanc.getY() == pionNoir.getY()) && (pionBlanc.getX() == pionNoir.getX() - 2)){
				deplacementPionBlancPossible (Direction.WW);
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("NN")){
			if(pionNoir.getY() >= 4 && !barrierePresente(pionNoir.getX(), pionNoir.getY() - 1) &&
					((pionBlanc.getX() == pionNoir.getX()) && (pionBlanc.getY() == pionNoir.getY() - 2))
					&& !barrierePresente(pionNoir.getX(), pionNoir.getY() - 3)){
				res=true;
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("EE")){
			if(pionNoir.getY() <= 12 && !barrierePresente(pionNoir.getX()+1, pionNoir.getY()) &&
					((pionBlanc.getY() == pionNoir.getY()) && (pionBlanc.getX() == pionNoir.getX() +2))
					&& !barrierePresente(pionNoir.getX()+3, pionNoir.getY())){
				res=true;
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("WW")){
			if(pionNoir.getY() >= 4 && !barrierePresente(pionNoir.getX()-1, pionNoir.getY()) &&
					((pionBlanc.getY() == pionNoir.getY()) && (pionBlanc.getX() == pionNoir.getX() -2))
					&& !barrierePresente(pionNoir.getX()-3, pionNoir.getY())){
				res=true;
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("SS")){
			if(pionNoir.getY() <= 12 && !barrierePresente(pionNoir.getX(), pionNoir.getY() + 1) &&
					((pionBlanc.getX() == pionNoir.getX()) && (pionBlanc.getY() == pionNoir.getY() + 2))
					&& !barrierePresente(pionNoir.getX(), pionNoir.getY() + 3)){
				res=true;
			}
			else
			{
				res=false;
			}
		}
		
		if(localDirection.equals("NE")){
			if ((pionBlanc.getX() == pionNoir.getX()) && (pionBlanc.getY() == pionNoir.getY() - 2)){
				if (pionNoir.getY() >= 2 && pionNoir.getX() <= 14 &&
						!barrierePresente(pionNoir.getX(), pionNoir.getY() - 1) && 
						!barrierePresente(pionNoir.getX()+1, pionNoir.getY() - 3)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
			else if ((pionBlanc.getY() == pionNoir.getY()) && (pionBlanc.getX() == pionNoir.getX() + 2)){
				if (pionNoir.getY() >= 2 && pionNoir.getX() <= 14 &&
						!barrierePresente(pionNoir.getX()+1, pionNoir.getY()) && 
						!barrierePresente(pionNoir.getX()+2, pionNoir.getY()-1)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
		}
		
		if(localDirection.equals("NW")){
			if ((pionBlanc.getX() == pionNoir.getX()) && (pionBlanc.getY() == pionNoir.getY() - 2)){
				if (pionNoir.getY() >= 2 && pionNoir.getX() >= 2 &&
						!barrierePresente(pionNoir.getX(), pionNoir.getY() - 1) && 
						!barrierePresente(pionNoir.getX()-1, pionNoir.getY() - 3)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
			else if ((pionBlanc.getY() == pionNoir.getY()) && (pionBlanc.getX() == pionNoir.getX() - 2)){
				if (pionNoir.getY() >= 2 && pionNoir.getX() >= 2 &&
						!barrierePresente(pionNoir.getX()-1, pionNoir.getY()) && 
						!barrierePresente(pionNoir.getX()-2, pionNoir.getY()-1)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
		}
		
		if(localDirection.equals("SE")){
			if ((pionBlanc.getX() == pionNoir.getX()) && (pionBlanc.getY() == pionNoir.getY() + 2)){
				if (pionNoir.getY() <= 14 && pionNoir.getX() <= 14 &&
						!barrierePresente(pionNoir.getX(), pionNoir.getY() + 1) && 
						!barrierePresente(pionNoir.getX()+1, pionNoir.getY() + 3)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
			else if ((pionBlanc.getY() == pionNoir.getY()) && (pionBlanc.getX() == pionNoir.getX() + 2)){
				if (pionNoir.getY() <= 14 && pionNoir.getX() <= 14 &&
						!barrierePresente(pionNoir.getX()+1, pionNoir.getY()) && 
						!barrierePresente(pionNoir.getX()+2, pionNoir.getY()+1)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
		}
		
		if(localDirection.equals("SW")){
			if ((pionBlanc.getX() == pionNoir.getX()) && (pionBlanc.getY() == pionNoir.getY() - 2)){
				if (pionNoir.getY() <= 14 && pionNoir.getX() >= 2 &&
						!barrierePresente(pionNoir.getX(), pionNoir.getY() - 1) && 
						!barrierePresente(pionNoir.getX()-1, pionNoir.getY() - 3)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
			else if ((pionBlanc.getY() == pionNoir.getY()) && (pionBlanc.getX() == pionNoir.getX() - 2)){
				if (pionNoir.getY() <= 14 && pionNoir.getX() >= 2  &&
						!barrierePresente(pionNoir.getX()-1, pionNoir.getY()) && 
						!barrierePresente(pionNoir.getX()-2, pionNoir.getY()+1)){
					res=true;
				}
				else
				{
					res=false;
				}
			}
		}
		return res;
	}
		
	public boolean deplacerPionBlanc(Direction direction) {
		if(deplacementPionBlancPossible(direction)) {
			if(direction.equals(Direction.N)) {
				pionBlanc.setY(pionBlanc.getY() - 2);
			}
			if(direction.equals(Direction.S)) {
				pionBlanc.setY(pionBlanc.getY() + 2);
			}
			if(direction.equals(Direction.E)) {
				pionBlanc.setX(pionBlanc.getX() + 2);
			}
			if(direction.equals(Direction.W)) {
				pionBlanc.setX(pionBlanc.getX() - 2);
			}
			return true;
		}
		return false;
	}
	
	public boolean deplacerPionNoir(Direction direction) {
		if(deplacementPionBlancPossible(direction)) {
			if(direction.equals(Direction.N)) {
				pionNoir.setY(pionNoir.getY() - 2);
			}
			if(direction.equals(Direction.S)) {
				pionNoir.setY(pionNoir.getY() + 2);
			}
			if(direction.equals(Direction.E)) {
				pionNoir.setX(pionNoir.getX() + 2);
			}
			if(direction.equals(Direction.W)) {
				pionNoir.setX(pionNoir.getX() - 2);
			}
			return true;
		}
		return false;
	}
		

}
